package futbol

import implementacionCommand.Adm
import implementacionCommand.Calificacion
import implementacionCommand.Propuesta
import java.util.ArrayList

class Jugador {
	
	@Property Tipo estado 
	@Property Condicion condicion
	@Property Partido partido 
	@Property int demeritos=0
	@Property String email
	@Property String fecha
	@Property String nombre		 
	@Property int puntajeTotal
	@Property int numeroDeCalificaciones
	var ArrayList<Jugador> amigos = new ArrayList<Jugador>()
	var ArrayList<Calificacion> calificacionesRechazadas = new ArrayList<Calificacion>()
	
	new(){}
	
	new(Tipo estado){
		this.estado=estado
	}
	
	def amigosSize(){return amigos.size}
	
	def cantidadCalificacionesRechazadas(){
		calificacionesRechazadas.size
	}
	
	def agregaAmigos(ArrayList<Jugador> amigosTentativos){
		this.amigos.addAll(amigosTentativos)
	}
	
	def pasameEmail(){
		return email
	}
	

	
	
	def inscribirmeAPartido (Partido partido){
		estado.puedeJugar(this, partido, condicion)			
	}
	
	def ArrayList<Jugador> pasameTusAmigos(){
		return amigos
	}
	
	//agrega un jugador a la lista de amigos
	def void agregarAmigo(Jugador jugador){
		amigos.add(jugador)
	}
	
	//saca un jugador de la lista de amigos
	def void sacarAmigo(Jugador jugador){
		amigos.remove(jugador)
	}
	
	def void bajateDeUnPartido (Partido partido, Jugador remplazo){
		this.estado.quitarDeUnPartidoA(this, remplazo, partido)
	}
	

	def tenesUnaInfraccion(){
		this.demeritos= demeritos +1
	}
	
	//apartado para entrega n�‹ 4
	
	def void agregaCriticaRechazada(Calificacion calificacion){
		this.calificacionesRechazadas.add(calificacion)
	}
	
	def void calificate(int puntajeNuevo){
		this.puntajeTotal= puntajeTotal+puntajeNuevo
		this.numeroDeCalificaciones=numeroDeCalificaciones+1
	}
	
	def int puntaje(){
		puntajeTotal/numeroDeCalificaciones
	}
	
	def void enviaPropuesta(Adm admin,String nombre, Tipo tipoDeInscripcion, String fechaDeNacimiento, String email, ArrayList<Jugador> amigos){
		var propuesta=new Propuesta(nombre,tipoDeInscripcion,fechaDeNacimiento,email,amigos)
		admin.agregaPedido(propuesta)
	}
	def void enviaCalificacion(Adm admin,Jugador receptor,String critica, int puntaje){
		var calificacion= new Calificacion(this,receptor,critica,puntaje)
		admin.agregaPedido(calificacion)
	}
	
	def saliSiCondicional(Partido partido) {
		estado.sacarSiCondicional(partido, this)
		}
	
	def saliSiSolidario(Partido partido) {
		estado.sacarSiSolidario(partido, this)
	}
	
}